﻿using Onshi.POS.Modelo.Entidades.Tipos;
using Onshi.POS.Modelo.Enumeradores;
using Onshi.POS.Modelo.Objectos;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Onshi.POS.Modelo.Entidades
{
    [Serializable]
    public class Cliente : Persona<RubroCliente, DomicilioCliente, TelefonoCliente, ClienteCampoPersonalizadoCliente, CampoPersonalizadoCliente>
    {
        #region Constructores

        public Cliente()
            : base()
        {
        }

        #endregion

        #region Atributos

        private TipoIva tipoIva;
        private Vendedor vendedor;
        private ListaPrecioVenta listaPrecioVenta;
        private Decimal limiteDeuda;
        private String cuit;
        private List<TipoFormaPago> tiposFormasPagos;

        #endregion

        #region Propiedades

        public List<TipoFormaPago> TiposFormasPagos
        {
            get { return tiposFormasPagos; }
            set { tiposFormasPagos = value; }
        }

        public String Cuit
        {
            get { return cuit; }
            set { cuit = value; }
        }

        public Decimal LimiteDeuda
        {
            get { return limiteDeuda; }
            set { limiteDeuda = value; }
        }

        public ListaPrecioVenta ListaPrecioVenta
        {
            get { return listaPrecioVenta; }
            set { listaPrecioVenta = value; }
        }

        public Vendedor Vendedor
        {
            get { return vendedor; }
            set { vendedor = value; }
        }

        public TipoIva TipoIva
        {
            get { return tipoIva; }
            set { tipoIva = value; }
        }

        public String TipoIvaNombre
        {
            get { return tipoIva.Nombre; }
        }

        public String CuitFormato
        {
            get
            {
                var cuitFormato = String.Empty;
                if (!String.IsNullOrWhiteSpace(cuit) && cuit.Length == 11)
                    cuitFormato = String.Format("{0}-{1}-{2}", cuit.Substring(0, 2), cuit.Substring(2, 8), cuit.Substring(10));
                return cuitFormato;
            }
        }

        public String VendedorCodigoNombre
        {
            get { return vendedor.CodigoNombre; }
        }

        public String ListaPrecioVentaNombre
        {
            get { return ListaPrecioVenta.Nombre; }
        }

        public String LimiteDeudaFormato
        {
            get
            {
                var limiteDeudaFormato = String.Empty;
                if (tiposFormasPagos.Exists(x => x.Id == (Byte)EnumTiposFormasPagos.CuentaCorriente))
                    limiteDeudaFormato = Formato.Porcentaje(limiteDeuda);
                return limiteDeudaFormato;
            }
        }

        #endregion
    }
}
